package com.domino.client;


import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;

import com.domino.shared.CreateResponse;
import com.domino.shared.JoinRequest;
import com.domino.shared.JoinResponse;
import com.domino.shared.LeaveGameReason;
import com.domino.shared.PlayerId;
import com.domino.shared.PutRequest;
import com.domino.shared.ActionResponse;
import com.domino.shared.SessionStateRequest;
import com.domino.shared.SessionStateResponse;
import com.domino.shared.SessionStateResponseFinished;
import com.domino.shared.SessionStateResponseFirstRoundClientAction;
import com.domino.shared.SessionStateResponseFirstRoundWaitForServer;
import com.domino.shared.SessionStateResponseNewSession;
import com.domino.shared.SessionStateResponsePending;
import com.domino.shared.SessionStateResponsePlayerGaveUp;
import com.domino.shared.SessionStateResponseRoundClientAction;
import com.domino.shared.SessionStateResponseRoundWaitForServer;
import com.domino.shared.model.Brick;
import com.domino.shared.model.Color;
import com.domino.shared.model.Point;
import com.domino.shared.model.SimpleBoard;
import com.domino.shared.session.SessionId;
import com.google.gwt.user.client.rpc.AsyncCallback;

public interface OthelloServiceAsync {

	void putBrick(PutRequest request, AsyncCallback<ActionResponse> callback);
	
	void joinGame(JoinRequest request, AsyncCallback<JoinResponse> callback);
	
	void pollSession(SessionStateRequest request, AsyncCallback<SessionStateResponse> callback);
	
	void getBricks(SessionId id, AsyncCallback<List<Brick>> callback);

	void dummy(SessionStateResponseRoundWaitForServer a1,
			SessionStateResponseRoundClientAction a2,
			SessionStateResponsePending a3, SessionStateResponseNewSession a4,
			SessionStateResponseFirstRoundWaitForServer a5,
			SessionStateResponseFirstRoundClientAction a6,
			SessionStateResponseFinished a7,SessionStateResponsePlayerGaveUp a8, PlayerId id, SimpleBoard sb,
			LinkedList<Point> list, LinkedHashSet<Point> set,
			LinkedHashSet<Point> list2, LinkedList<Point> list3,
			AsyncCallback<Void> callback);


	void leaveGame(SessionId id, PlayerId playerId, LeaveGameReason reason, AsyncCallback<Void> callback);

	void botGameFinished(SessionId id, PlayerId playerId,
			String bricks, AsyncCallback<Void> callback);

}
